Security Headers হল HTTP হেডার যা ওয়েব সার্ভিস বা অ্যাপ্লিকেশনের সুরক্ষা বাড়াতে ব্যবহৃত হয়। এগুলি ব্রাউজারকে বিভিন্ন নিরাপত্তা নীতি অনুসরণ করতে বলে, যেমন কোন রিসোর্স কোথা থেকে লোড করা যাবে, কীভাবে তথ্য সুরক্ষিত থাকবে, এবং কীভাবে ব্রাউজারটি ব্যবহারকারীকে নিরাপদ রাখবে।
Spring Security তে Security Headers কনফিগার করা সহজ এবং এটি সুরক্ষা বাড়ানোর জন্য একটি কার্যকরী পদ্ধতি।
বিভিন্ন Security Headers:
- X-Content-Type-Options: MIME ধরনের অটোটেস্টিং নিষ্ক্রিয় করে।
- Strict-Transport-Security (HSTS): ব্রাউজারকে HTTPS ব্যবহারের জন্য বাধ্য করে।
- X-Frame-Options: ওয়েব পেজকে iframe-এ লোড হতে নিষিদ্ধ করে।
- X-XSS-Protection: Cross-site Scripting (XSS) আক্রমণ প্রতিরোধে সাহায্য করে।
- Content-Security-Policy (CSP): স্ক্রিপ্ট বা অন্যান্য কন্টেন্ট উৎস নিয়ন্ত্রণ করে।
Spring Security তে Security Headers কনফিগারেশন
Spring Security তে Security Headers কনফিগার করার জন্য, আপনি HttpSecurity কনফিগারেশন ব্যবহার করতে পারেন। Spring Security ডিফল্টভাবে বেশ কিছু নিরাপত্তা হেডার সাপোর্ট করে, তবে আপনি আপনার প্রয়োজন অনুসারে সেগুলি কাস্টমাইজ করতে পারেন।
ধাপ ১: Spring Security কনফিগারেশন ক্লাস তৈরি করুন
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.web.SecurityFilterChain;
import org.springframework.security.web.header.HeaderWriterFilter;
@Configuration
public class SecurityConfig {
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.headers()
.defaultsDisabled() // Disable default headers first
.addHeaderWriter(new XContentTypeOptionsHeaderWriter()) // Add custom headers
.addHeaderWriter(new XFrameOptionsHeaderWriter())
.addHeaderWriter(new StrictTransportSecurityHeaderWriter())
.addHeaderWriter(new XXssProtectionHeaderWriter())
.addHeaderWriter(new ContentSecurityPolicyHeaderWriter())
.and()
.authorizeRequests()
.anyRequest().authenticated(); // Protect all requests
return http.build();
}
// Add custom headers
public static class XContentTypeOptionsHeaderWriter implements org.springframework.security.web.header.HeaderWriter {
@Override
public void writeHeaders(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) {
response.setHeader("X-Content-Type-Options", "nosniff");
}
}
public static class XFrameOptionsHeaderWriter implements org.springframework.security.web.header.HeaderWriter {
@Override
public void writeHeaders(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) {
response.setHeader("X-Frame-Options", "DENY");
}
}
public static class StrictTransportSecurityHeaderWriter implements org.springframework.security.web.header.HeaderWriter {
@Override
public void writeHeaders(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) {
response.setHeader("Strict-Transport-Security", "max-age=31536000 ; includeSubDomains");
}
}
public static class XXssProtectionHeaderWriter implements org.springframework.security.web.header.HeaderWriter {
@Override
public void writeHeaders(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) {
response.setHeader("X-XSS-Protection", "1; mode=block");
}
}
public static class ContentSecurityPolicyHeaderWriter implements org.springframework.security.web.header.HeaderWriter {
@Override
public void writeHeaders(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) {
response.setHeader("Content-Security-Policy", "default-src 'self'; script-src 'self' https://apis.google.com;");
}
}
}
ব্যাখ্যা:
defaultsDisabled(): Spring Security এর ডিফল্ট হেডারগুলিকে অক্ষম করতে ব্যবহৃত হয়, যাতে আপনি কাস্টম হেডারগুলি যুক্ত করতে পারেন।addHeaderWriter(): এটি একটি কাস্টম হেডার লেখক যুক্ত করে যা নির্দিষ্ট হেডারগুলির মান সেট করে।
ধাপ ২: Spring Security Header Configurations
Spring Security ডিফল্টভাবে অনেক নিরাপত্তা হেডার যুক্ত করে, তবে আপনি প্রয়োজনে তাদের কাস্টমাইজ করতে পারেন। নিচে কিছু সাধারণ হেডারের উদাহরণ দেওয়া হলো:
1. Strict-Transport-Security (HSTS)
HSTS একটি HTTP হেডার যা নির্দেশ করে যে ব্রাউজারটি সবসময় HTTPS ব্যবহার করবে। এটি SSL/TLS সুরক্ষা সক্রিয় করতে সাহায্য করে।
response.setHeader("Strict-Transport-Security", "max-age=31536000 ; includeSubDomains");
এটি সার্ভারকে বলে যে পরবর্তী ১ বছর (৩১৫৩৬০০০ সেকেন্ড) সার্ভারের সাথে যোগাযোগ করতে সবসময় HTTPS ব্যবহার করতে হবে।
2. X-Content-Type-Options
এই হেডারটি ব্রাউজারকে বলে যে এটি কোনো ফাইলের MIME টাইপ পরিবর্তন করার চেষ্টা না করে, একে যেভাবে সেট করা আছে তেমনিভাবে তা পরিচালনা করবে।
response.setHeader("X-Content-Type-Options", "nosniff");
3. X-Frame-Options
এই হেডারটি নিশ্চিত করে যে আপনার পেজটি কোনো iframe বা frame এ লোড করা যাবে না, যাতে clickjacking আক্রমণ প্রতিরোধ হয়।
response.setHeader("X-Frame-Options", "DENY");
DENY: কোনোভাবেই iframe-এ পেজ লোড হবে না।SAMEORIGIN: শুধুমাত্র একই ডোমেইন থেকে iframe-এ পেজ লোড হবে।
4. X-XSS-Protection
এই হেডারটি XSS (Cross-Site Scripting) আক্রমণ থেকে রক্ষা করতে ব্রাউজারের XSS সুরক্ষা চালু করে।
response.setHeader("X-XSS-Protection", "1; mode=block");
5. Content-Security-Policy (CSP)
CSP হেডারটি ব্রাউজারকে নির্দিষ্ট ডোমেইন থেকে স্ক্রিপ্ট বা অন্যান্য রিসোর্স লোড করার অনুমতি দেয়। এটি XSS আক্রমণ থেকে সুরক্ষা প্রদান করে।
response.setHeader("Content-Security-Policy", "default-src 'self'; script-src 'self' https://apis.google.com;");
এটি নিশ্চিত করে যে শুধু 'self' (অর্থাৎ, বর্তমান ডোমেইন) এবং নির্দিষ্ট ডোমেইন থেকে স্ক্রিপ্ট লোড করা যাবে।
ধাপ ৩: Test your Application
এখন আপনি Spring Security এর মাধ্যমে Security Headers কনফিগারেশন করেছেন। আপনার অ্যাপ্লিকেশন রান করার পরে, ব্রাউজারের Developer Tools এর Network ট্যাবের মাধ্যমে আপনার HTTP রেসপন্সে হেডারগুলির উপস্থিতি পরীক্ষা করতে পারেন।
- ব্রাউজারে আপনার অ্যাপ্লিকেশনটি খুলুন।
- Developer Tools খুলুন (F12 বা Ctrl+Shift+I) এবং Network ট্যাবে যান।
- রিকোয়েস্ট সিলেক্ট করুন এবং Headers সেকশনে Security Headers চেক করুন।
উপসংহার
Spring Security তে Security Headers কনফিগার করে আপনি আপনার ওয়েব অ্যাপ্লিকেশনের সুরক্ষা বাড়াতে পারেন। HSTS, XSS Protection, Content Security Policy এবং অন্যান্য সিকিউরিটি হেডারগুলি ব্যবহার করে আপনি অ্যাপ্লিকেশনটিকে আক্রমণের থেকে সুরক্ষিত করতে পারেন। Spring Security এই কনফিগারেশনকে খুব সহজভাবে ম্যানেজ করতে দেয়, যা আপনার সিস্টেমের নিরাপত্তা স্তর উন্নত করে।
Read more